package core

// SinkCreator 是一个函数类型，用作具体 Sink 实现的构造器。
// 工厂（factory）使用它来实例化所需的数据汇。
type SinkCreator func() Sink

// Sink 是 ETL 管道中数据的最终目的地。
// 它负责接收处理过的数据记录，并将它们写入到外部系统，
// 例如数据库、文件或消息队列。
type Sink interface {
	// Open 方法负责为写入操作准备好目标。
	// 这通常包括建立数据库连接、打开文件句柄或连接到消息队列。
	// 它在第一批数据写入前被调用。
	Open(config map[string]interface{}) error

	// Write 将一批记录写入目的地。
	// 传入记录切片 `[]Record` 是一项关键设计，旨在实现高效的批量操作
	// （例如数据库的 `BULK INSERT`）。具体的 Sink 实现应充分利用这一点来优化性能。
	Write(records []Record) error

	// Close 用于完成写入过程并释放所有资源。
	// 这是一个关键步骤，可能包括将内部缓冲区的数据刷写到磁盘，或优雅地关闭网络连接。
	// 必须调用此方法以确保数据不会丢失。
	Close() error
}
